<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/code.js"></script>
    <style>
        div{
            user-select: none;  
        }
    </style>
</head>

<body>
    <!-- <span id="user_span" style="font-size: 12px;color: red;">123123s</span> -->
    <div>
        <p>
            <label for="user">用户名:</label>
            <input type="text" id="user" placeholder="用户名">
            <span id="user_span"></span>
        </p>
        <p>
            <label for="">密&emsp;码:</label>
            <input type="text" id="pwd">
            <span id="pwd_span"></span>
        </p>
        <p>
            <label for="">确&emsp;认:</label>
            <input type="text" id="repwd">
            <span id="repwd_span"></span>
        </p>
        <p>
            <label for="">验证码:</label>
            <input type="text" id="code">
            <span id="createCode">a1b2</span>
            <span id="code_span"></span>
        </p>
        <p>
            <input type="submit" id="btn" value="注册">
        </p>
    </div>
</body>
<script>
    // 用户名
    // 由数字 大小写字母 _ $ 组成 , 6-12位,且不能以数字开头

    // 判断的流程  从易到难的顺序 
    // a. 长度  6-12位 
    // b. 不能以数字开头
    // c. 由数字 大小写字母 _ $ 组成  (所有的字符都必须在合法字符的范围内,只要有一个不是合法的字符 报错   => 判断字符串中是否能含有非法字符)


    // 密码
    // 由数字 大小写字母 _ 组成   6-12位 

    // 判断密码强度
    // 数字,大写,小写,特殊字符  中 只出现一种   11111   aaaaaa  AAAAAA   弱
    // 数字,大写,小写,特殊字符  中 出现2种      11111a  a1111   aAAAAA   中
    // 数字,大写,小写,特殊字符  中 出现3种      1aA                      强
    // 数字,大写,小写,特殊字符  中 出现4种      1aA_                     超强

    // 是否存在数字  / 大写 /小写 / 特殊字符

    // true + true + true + false  => 3 

    // 确认密码  
    // 和密码相同   => 两次密码输入不一致

    // 验证码  => 封装一个方法可以随机生成四位验证码 (0-9 a-z A-Z )
    // 1. 页面加载时,随机生成四个不重复的验证码 (0-9 a-z A-Z )   => createCode
    // 2. 点击 验证码 进行切换
    // 3. 验证码输入判断  (输入的  随机生成的  保持一致) 
</script>
<script>
    // 注意: 
    // 1. js操作元素之前必须先获取元素
    // 2. 能改变元素的只有元素本身
    // 3. JS操作元素改变样式时 都是通过内联样式实现的

    // 1. 获取元素 
    var userInp = document.getElementById("user");
    var userSpan = document.getElementById("user_span");

    var pwdInp = document.getElementById("pwd");
    var pwdSpan = document.getElementById("pwd_span");

    var repwdInp = document.getElementById("repwd");
    var repwdSpan = document.getElementById("repwd_span");

    var codeInp = document.getElementById("code");
    var codeSpan = document.getElementById("code_span");

    var createCode = document.getElementById("createCode");

    var btn = document.getElementById("btn");

   



    createCode.innerText =  randCode();
    createCode.onclick = function(){
        createCode.innerText =  randCode();
    }




    // 2. 绑定点击事件 => 点击验证
    btn.onclick = function () {

        // 3. 点击取值  => 字符串
        var user = userInp.value;
        var pwd = pwdInp.value;
        var repwd = repwdInp.value;
        var code = codeInp.value;

        // 4.  6-12位
        if (user.length >= 6 && user.length <= 12) {
            console.log("长度合法");

            // 5. 且不能以数字开头  
            // (3)  取开头 判断是不是数字
            var firstChar = user.charAt(0);  // 字符串 "1"
            if (isNaN(firstChar)) { // 是非数字

                // 6.  由数字 大小写字母 _ 组成=> 每一个字符都是合法的(不存在非法字符)
                var flag = true; //假设都是合法的
                for (var i = 0; i < len; i++) {
                    var char = user.charAt(i);
                    if (normalList.indexOf(char) == -1) {//在normalList中不存在 => 非法的
                        flag = false;
                        break;
                    }
                }
                if (flag) {
                    userSpan.innerText = "√";
                    userSpan.style.color = "green";
                    userSpan.style.fontSize = "12px";
                } else {
                    userSpan.innerText = "* 用户名由数字、字母、下划线组成";
                    userSpan.style.color = "red";
                    userSpan.style.fontSize = "12px";
                }


            } else {
                userSpan.innerText = "* 用户名不能以数字开头";
                userSpan.style.color = "red";
                userSpan.style.fontSize = "12px";
            }
        } else {
            userSpan.innerText = "* 用户名需要在6-12位之间";
            userSpan.style.color = "red";
            userSpan.style.fontSize = "12px";
        }

        // 密码
        // (1) 密码强度
        var isPwdOk = false;
        if (pwd.length >= 6 && pwd.length <= 12) {

            // (2)  是否存在非法字符
            var flag = true; //假设都是合法的
            for (var char of pwd) {
                if (normalList.indexOf(char) == -1) {
                    flag = false;
                    break;
                }
            }

            if (flag) {
                // pwdSpan.innerText = "* 密码正确";
                // pwdSpan.style.color="green";
                // pwdSpan.style.fontSize="12px";

                var isExistNum = false;     // 假设不存在数组
                var isExistSmall = false;
                var isExistBig = false;
                var isExistSpe = false;

                for (var char of pwd) {
                    if (numList.indexOf(char) != -1) {  // 存在数字
                        isExistNum = true;
                    }
                    if (smallList.indexOf(char) != -1) {  // 存在数字
                        isExistSmall = true;
                    }
                    if (bigList.indexOf(char) != -1) {  // 存在数字
                        isExistBig = true;
                    }
                    if (speList.indexOf(char) != -1) {  // 存在数字
                        isExistSpe = true;
                    }
                }

                // console.log(isExistNum,isExistSmall,isExistBig,isExistSpe);

                var level = isExistNum + isExistSmall + isExistBig + isExistSpe;

                switch (level) {
                    case 1:
                        pwdSpan.innerText = "密码强度:弱";
                        break;
                    case 2:
                        pwdSpan.innerText = "密码强度:中";
                        break;
                    case 3:
                        pwdSpan.innerText = "密码强度:强";
                        break;
                    case 4:
                        pwdSpan.innerText = "密码强度:超强";
                        break;
                }
                pwdSpan.style.color = "green";
                pwdSpan.style.fontSize = "12px";


                isPwdOk = true;

                // 选择结构的嵌套  密码正确 => 确认密码
                // 密码正确的前提下 => 判断确认密码 
                // if(repwd){  //有再次 输入密码进行确认
                //     if(pwd === repwd){
                //         repwdSpan.innerText = "√";
                //         repwdSpan.style.color="green";
                //         repwdSpan.style.fontSize="12px";
                //     }else{
                //         repwdSpan.innerText = "* 密码不一致";
                //         repwdSpan.style.color="red";
                //         repwdSpan.style.fontSize="12px";
                //     }

                // }else{
                //     repwdSpan.innerText = "* 请再次输入密码";
                //     repwdSpan.style.color="red";
                //     repwdSpan.style.fontSize="12px";
                // }



            } else {
                pwdSpan.innerText = "* 密码由数字、字母、下划线组成";
                pwdSpan.style.color = "red";
                pwdSpan.style.fontSize = "12px";
            }

        } else {
            pwdSpan.innerText = "* 密码需要在6-12位之间";
            pwdSpan.style.color = "red";
            pwdSpan.style.fontSize = "12px";
        }

        // 同级判断   再次确认密码之前 => 先判断密码格式是否正确
        if (repwd) {  //有值 输入密码进行确认
            if (isPwdOk) { // 再次确认之前 先判断密码格式是否正确
                if (pwd === repwd) {
                    repwdSpan.innerText = "√";
                    repwdSpan.style.color = "green";
                    repwdSpan.style.fontSize = "12px";
                } else {
                    repwdSpan.innerText = "* 密码不一致";
                    repwdSpan.style.color = "red";
                    repwdSpan.style.fontSize = "12px";
                }
            } else {
                repwdSpan.innerText = "* 密码格式有误";
                repwdSpan.style.color = "red";
                repwdSpan.style.fontSize = "12px";
            }
        } else {
            repwdSpan.innerText = "* 请再次输入密码";
            repwdSpan.style.color = "red";
            repwdSpan.style.fontSize = "12px";
        }

        if(code){
            if(code.toLowerCase() === createCode.innerText.toLowerCase()){
                codeSpan.innerText = "√";
                codeSpan.style.color = "green";
                codeSpan.style.fontSize = "12px";
            }else{
                codeSpan.innerText = "请输入正确的验证码";
                codeSpan.style.color = "red";
                codeSpan.style.fontSize = "12px";
            }
        }else{
            codeSpan.innerText = "* 请先输入验证码";
            codeSpan.style.color = "red";
            codeSpan.style.fontSize = "12px";
        }



    }




</script>

</html>